home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / mint / filesys / mfs610s.zoo / mfsconf.c < prev    next >
C/C++ Source or Header  |  1993-11-25  |  3KB  |  168 lines

  1. /* Minixfs translation configurer */
  2.  
  3. #include <sys/types.h>
  4. #include <mintbind.h>
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <unistd.h>
  8.  
  9. #include "minixfs/minixfs.h"
  10.  
  11. #ifdef __STDC__
  12. # define    P(s) s
  13. #else
  14. # define P(s) ()
  15. #endif
  16.  
  17.  
  18. /* mfsconf.c */
  19. void main P((int argc , char **argv ));
  20. void usage P((void ));
  21. long tr_get P((long arg , int chr ));
  22. char *tr_text P((int arg ));
  23.  
  24. #undef P
  25.  
  26. long trans;
  27.  
  28. void main(argc,argv)
  29. int argc;
  30. char **argv;
  31. {
  32.     extern char *optarg;
  33.     static char err=0;
  34.     char c;
  35.         extern int opterr;
  36.     long tmp;
  37.     extern int __mint;
  38.  
  39.     if(__mint==0)
  40.     {
  41.         fprintf(stderr,"Error: MiNT not active\n");
  42.         exit(1);
  43.     }    
  44.  
  45.     if(argc==1) usage();
  46.  
  47.     if (Dcntl (MFS_VERIFY, argv[1], &trans) || trans != MFS_MAGIC)
  48.     {
  49.         fprintf(stderr,"Pathname: %s is not a minix partition.\n"
  50.                 ,argv[1]);
  51.         exit(1);
  52.     }
  53.  
  54.     Dcntl (MFS_GTRANS, argv[1], &trans);
  55.  
  56.     if(argc==2)
  57.     {
  58.         printf("Minix Filesystem Path %s\nConfiguration:\n",argv[1]);
  59.         printf("Directory Translation %s.\n",tr_text(DIR_TOS));
  60.         printf("Search Translation    %s.\n",tr_text(SRCH_TOS));
  61.         printf("Auto Exec Setting     %s.\n",tr_text(AEXEC_TOS));
  62.         printf("Lower Case Creation   %s.\n",tr_text(LWR_TOS));
  63.         exit(0);
  64.     }
  65.  
  66.     /* Parse command-line options */
  67.     opterr=0;
  68.     while((c=getopt(argc-1,&argv[1],"l:L:d:D:s:S:x:X:"))!=EOF)
  69.     {
  70.             switch(c){
  71.  
  72.                 case 'l':
  73.             case 'L':
  74.             trans &= ~(LWR_TOS|LWR_MNT); 
  75.             tmp=tr_get(LWR_TOS,optarg[0]);
  76.             if(tmp==-1) err=1;
  77.             else trans |=tmp;
  78.             break;
  79.  
  80.             case 'd':
  81.             case 'D':
  82.             trans &= ~(DIR_TOS | DIR_MNT);
  83.             tmp=tr_get(DIR_TOS,optarg[0]);
  84.             if(tmp==-1) err=1;
  85.             else trans |=tmp;
  86.             break;
  87.     
  88.             case 'x':
  89.             case 'X':
  90.             trans &= ~(AEXEC_TOS | AEXEC_MNT);
  91.             tmp=tr_get(AEXEC_TOS,optarg[0]);
  92.             if(tmp==-1)err=1;
  93.             else trans |=tmp;            
  94.             break;
  95.             
  96.             case 's':
  97.             case 'S':
  98.             trans &= ~(SRCH_TOS | SRCH_MNT);
  99.             tmp= tr_get(SRCH_TOS,optarg[0]);
  100.             if(tmp==-1) err=1;
  101.             else trans |=tmp;
  102.             break;
  103.  
  104.             case '?':
  105.             err=1;
  106.             break;
  107.         }
  108.     }
  109.     if(err) usage();
  110.  
  111.     Dcntl (MFS_STRANS, argv[1], &trans);
  112.     exit(0);
  113. }
  114.  
  115. void usage()
  116. {
  117.     fprintf(stderr,"Usage : mfsconfig path -[ldsx] [m|t|b|n]\n");
  118.     fprintf(stderr,"'path' is any minix filesystem path\n");
  119.     fprintf(stderr,"-l : Lower case creation\n");
  120.     fprintf(stderr,"-d : Directory entry translation\n");
  121.     fprintf(stderr,"-s : Search translation\n");
  122.     fprintf(stderr,"-x : Exec translation\n");
  123.     fprintf(stderr,"m : MiNT domain only\n");
  124.     fprintf(stderr,"t : TOS domain only\n");
  125.     fprintf(stderr,"b : Both domains (always)\n");
  126.     fprintf(stderr,"n : Neither domain (never)\n");
  127.     exit(1);
  128. }
  129.  
  130. long tr_get(arg,chr)
  131. long arg ;
  132. char chr;
  133. {
  134.     switch(chr)
  135.     {
  136.         case 'b':
  137.         case 'B':
  138.         return (arg | (arg<<1)) ;
  139.  
  140.         case 'n':
  141.         case 'N':
  142.         return 0;
  143.  
  144.         case 't':
  145.         case 'T':
  146.         return arg;
  147.  
  148.         case 'm':
  149.         case 'M':
  150.         return arg<<1;
  151.         
  152.         default :
  153.         return -1;
  154.     }
  155. }
  156.  
  157. char *tr_msg[] = {"Never","TOS domain","MiNT domain","Always"} ;
  158.  
  159. char *tr_text(arg)
  160. int arg;
  161. {
  162.     int index;
  163.     index=0;
  164.     if(trans & arg) index |= 1;
  165.     if(trans & (arg<<1) ) index |= 2;
  166.     return tr_msg[index];
  167. }
  168.